From 99736d84a9f7263d1b77021277b28d9523a51ef0 Mon Sep 17 00:00:00 2001 From: Chris Wong Date: Wed, 22 Apr 2015 10:54:18 +1200 Subject: [PATCH] Add a --name option for setting the package name --- src/bin/new.rs | 7 +++++-- src/cargo/ops/cargo_new.rs | 25 +++++++++++++++---------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/bin/new.rs b/src/bin/new.rs index 0abff6a57..fdfb0283e 100644 --- a/src/bin/new.rs +++ b/src/bin/new.rs @@ -8,6 +8,7 @@ struct Options { flag_verbose: bool, flag_bin: bool, arg_path: String, + flag_name: Option, flag_vcs: Option, } @@ -24,6 +25,7 @@ Options: control system (git or hg) or do not initialize any version control at all (none) overriding a global configuration. --bin Use a binary instead of a library template + --name Set the resulting package name -v, --verbose Use verbose output "; @@ -31,12 +33,13 @@ pub fn execute(options: Options, config: &Config) -> CliResult> { debug!("executing; cmd=cargo-new; args={:?}", env::args().collect::>()); config.shell().set_verbose(options.flag_verbose); - let Options { flag_bin, arg_path, flag_vcs, .. } = options; + let Options { flag_bin, arg_path, flag_name, flag_vcs, .. } = options; let opts = ops::NewOptions { version_control: flag_vcs, - path: &arg_path, bin: flag_bin, + path: &arg_path, + name: flag_name.as_ref().map(|s| s.as_ref()), }; ops::new(opts, config).map(|_| None).map_err(|err| { diff --git a/src/cargo/ops/cargo_new.rs b/src/cargo/ops/cargo_new.rs index 9544b5243..d75c2b380 100644 --- a/src/cargo/ops/cargo_new.rs +++ b/src/cargo/ops/cargo_new.rs @@ -18,6 +18,7 @@ pub struct NewOptions<'a> { pub version_control: Option, pub bin: bool, pub path: &'a str, + pub name: Option<&'a str>, } impl Decodable for VersionControl { @@ -46,16 +47,20 @@ pub fn new(opts: NewOptions, config: &Config) -> CargoResult<()> { return Err(human(format!("Destination `{}` already exists", path.display()))) } - let name = try!(path.file_name().and_then(|s| s.to_str()).chain_error(|| { - human(&format!("cannot create a project with a non-unicode name: {:?}", - path.file_name().unwrap())) - })); - let name = - if opts.bin { - name - } else { - strip_rust_affixes(name) - }; + let name = match opts.name { + Some(name) => name, + None => { + let dir_name = try!(path.file_name().and_then(|s| s.to_str()).chain_error(|| { + human(&format!("cannot create a project with a non-unicode name: {:?}", + path.file_name().unwrap())) + })); + if opts.bin { + dir_name + } else { + strip_rust_affixes(dir_name) + } + } + }; for c in name.chars() { if c.is_alphanumeric() { continue } if c == '_' || c == '-' { continue } -- 2.30.2